﻿// *----------------------------------------------------------------
// Copyright (C) 2017 通通优品
// 版权所有。
// 
// 类名：ValidateCodeBase.cs
// 功能描述：TEC.Public.Component.ValidateCode
// 
// Create User：jym 2017/02/09
// 
// Edit User：UserName,EditTime
// Describe：Describe
// ----------------------------------------------------------------*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TEC.Web.Component.ValidateCode
{
    /// <summary>
    /// 验证码使用基本类
    /// </summary>
    public abstract class ValidateCodeBase : IValidateCode
    {
        /// <summary>
        /// 生成验证码值
        /// </summary>
        /// <returns></returns>
        public abstract string CreateCheckCode();
        /// <summary>
        /// 验证，并失效成功的验证码 （-1:过期 0：错误 1：成功）
        /// </summary>
        /// <param name="code"></param>
        /// <returns>-1:过期 0：错误 1：成功</returns>
        public abstract int IsValidate(string code, object id);
        /// <summary>
        /// 验证码的存储 (如果重新这个，相应应该重新 GetTempSavedCode、RemoveTempSaveCode 方法)
        /// </summary>
        /// <param name="code"></param>
        /// <param name="id">存储标识</param>
        protected abstract void SaveTempCode(string code, object id);
        /// <summary>
        /// 获取存储的验证码的值(如果重新这个，相应应该重新 SaveTempCode、RemoveTempSaveCode 方法)
        /// </summary>
        /// <param name="id">存储标识</param>
        /// <returns></returns>
        protected abstract object GetTempSavedCode(object id);
        /// <summary>
        /// 失效不需要的验证码(如果重新这个，相应应该重新 SaveTempCode、SaveTempCode 方法)
        /// </summary>
        /// <param name="id">存储标识</param>
        protected abstract void RemoveTempSaveCode(object id);
        /// <summary>
        /// 创建验证数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns>相关的数据</returns>
        public virtual object CreateCode(object id)
        {
            var code = CreateCheckCode();
            SaveTempCode(code, id);
            return code;
        }
    }
}
